Decoders are used in a large range of communication applications for decoding a stream of data that has been encoded at the other end of the transmission channel.
Various kinds of decoders are known in the art. Viterbi decoders exploit the well know Viterbi algorithm to decode a bitstream that has been encoded through a convolutional code.
Convolutional codes are applicable in various areas and to various devices, including modems, amateur radio communications, satellite communications, computer repository devices and digital television broadcasting. In such cases, Viterbi decoders can be adopted to decode signal encoded according, for instance, through TCM (Trellis Code Modulation)
When TCM is used, an encoded sequence may be represented by a shortest path in a graph comprising a finite number of nodes and states. After an initial start-up of a Trellis, each node has two incoming paths and two outgoing paths.
A Viterbi arrangement in a decoder structures and simplifies a procedure for finding the path that has the shortest distance with respect to the input bit sequence that was received at the input terminal of the decoder.
More in detail, when considering the incoming paths of a node, only the path having the shortest distance is a possible candidate for inclusion in the finally selected path with the shortest distance to the input sequence for reassembling the original received bitstream, while all other incoming paths inevitably give rise to paths having longer distances.
Thus, on each step forward in the Trellis, the only incoming path retained at each node is the one selected having the shortest distance, while all remaining paths can be deleted from the decoder memory. At each subsequent step, the distance contribution from the next branch in the Trellis is added to that of the retained path, and the deletion procedure of non-relevant paths is repeated. The successive deletion of paths is backwardly executed, so. that eventually only one distinct path, which is the same as the one which was used when the bitstream was encoded, will remain on successful completion of the decoding.
Even though Viterbi decoders have been largely used, the speed of current communication systems and amount of data that can be transferred today through communication channels require decoders with higher and higher performance, especially when dealing with continuous bitstreams.
For these reasons, attempts have been made in the prior art to improve Viterbi decoders when decoding a continuous stream of data composed of a plurality of coded blocks.
One known implementation, shown in FIG. 1, involves duplicating a Viterbi decoder. Two consecutively coded blocks are sent alternatively to the inputs of two identical decoders. After independent processing, the decoded data are joined in a new sequence.
Another known implementation, shown in FIG. 2, involves overclocking the Viterbi decoder. Two consecutively coded blocks are stored in a buffer and sent in sequence to the inputs of the Viterbi decoders, which must operate at least at double speed compared with the bitstream speed.
However, both solutions have shown drawbacks: the first solution uses two times the occupation area normally needed by a conventional Viterbi decoder, thus increasing the cost of hardware support; the second solution suffers from both high power consumption and high occupation area.